package com.hitqz.robot.biz.config;

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.hitqz.robot.api.business.dto.RemoteControlAuthDto;
import com.hitqz.robot.api.business.dto.RobotClientSummaryDto;
import com.hitqz.robot.api.business.dto.RobotJobDto;
import com.hitqz.robot.api.business.entity.RobotEntity;
import com.hitqz.robot.api.dispatch.model.RobotDispatchDto;
import com.hitqz.robot.api.dispatch.protocol.dto.FormConfigModalDto;
import org.locationtech.jts.geom.Polygon;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.concurrent.TimeUnit;

@Configuration
public class GuavaCacheConfig {


    @Bean("robotCache")
    public Cache<String, RobotClientSummaryDto> robotCache() {
        return CacheBuilder.newBuilder()
                // 设置缓存的过期时间
                .expireAfterWrite(10, TimeUnit.SECONDS)
                // 设置缓存的最大容量
                .maximumSize(50)
                .build();
    }


    @Bean("taskList")
    public Cache<String, LinkedList<RobotJobDto>> taskList() {
        return CacheBuilder.newBuilder()
                // 设置缓存的最大容量
                .maximumSize(100)
                .build();
    }

    /**
     * 调度组-机器人
     * key--调度
     * @return
     */
    @Bean("robotDispatch")
    public Cache<Integer, List<RobotEntity>> robotDispatch() {
        return CacheBuilder.newBuilder()
                // 设置缓存的最大容量
                .maximumSize(100)
                .build();
    }


    /**
     * 分配任务
     * 后续考虑使用
     * @return
     */
    @Bean("dispatchTask")
    public Cache<Long, PriorityQueue<RobotJobDto>> applyPath() {
        return CacheBuilder.newBuilder()
                // 设置缓存的最大容量
                .maximumSize(1000)
                .build();
    }


    /**
     * 缓存任务---
     * @return
     */
    @Bean("cacheRobotTask")
    public Cache<Long, RobotDispatchDto> cacheRobotTask() {
        return CacheBuilder.newBuilder()
                // 设置缓存的最大容量
                .maximumSize(1000)
                .build();
    }


    /**
     * 机器人位置-区域
     * 后续考虑使用
     * @return
     */
    @Bean("robotPosPolygon")
    public Cache<String, Polygon> robotPosPolygon() {
        return CacheBuilder.newBuilder()
                .expireAfterWrite(2,TimeUnit.SECONDS)
                // 设置缓存的最大容量
                .maximumSize(1000)
                .build();
    }




    @Bean("executeTaskRobot")
    public Cache<Integer, RobotEntity> executeTaskRobot() {
        return CacheBuilder.newBuilder()
                // 设置缓存的过期时间
                .expireAfterAccess(10, TimeUnit.SECONDS)
                // 设置缓存的最大容量
                .maximumSize(50)
                .build();
    }

    /**
     * 视频流输出是否存活
     * @return
     */
    @Bean("videoStreamOutputAlive")
    public Cache<String, Boolean> videoStreamOutputAlive() {
        return CacheBuilder.newBuilder()
                // 设置缓存的过期时间
                .expireAfterWrite(5, TimeUnit.SECONDS)
                // 设置缓存的最大容量
                .maximumSize(50)
                .build();
    }


}
